package com.qf.rbac2202.utils;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.Map;

public class PageQueryUtils<T>  {

    /**
     * 如果完全按照 params ，中的排序，name就用这个方法
     * @param params
     * @return
     */
    //静态方法声明泛型这么写
    public static <T> Page<T> getPage(Map<String,String> params){

        Page<T> page = getPage(params,null,"asc");

        return page;

    }

    /**
     * 如果param没有指定排序字段，默认用这个排序方法
     * @param params
     * @param colum
     * @param asc
     * @param <T>
     * @return
     */
    //1.如果params 有排序字段，就按照该排序字段设置排序
    //2.如果params  没有排序字段，那么可以给定一个默认的排序字段
    // 和默认的排序次数
    public static <T> Page<T> getPage(Map<String, String> params, String colum, String asc) {

        Long currentPage = Long.valueOf( params.get("page")) ;   //当前页号

        Long limit = Long.valueOf( params.get("limit")) ;   //页大小

        String username = params.get("username");//页面输入的用户查询条件

        String sidx = SQLFilter.sqlInject("sidx");

        String order = params.get("order"); //升序还是降序

        Page<T> page = new Page<>(currentPage, limit);   //创建分页对象

        //当页面传递了  排序字段时

        if (StringUtils.isNotBlank(sidx)) {
            if (StringUtils.isNotBlank(order) && order.equals("desc")){
                page.addOrder(OrderItem.desc(sidx));
            }else {
                page.addOrder(OrderItem.asc(sidx));
            }
            return page;
        }

        //如果没有传递排序字段，name按照默认排序进行排序
        //如果默认的排序字段为null，name不生成排序的语句
        if (!StringUtils.isNotBlank(colum)) {
            return page;
        }

        //按照默认的字段进行排序
        if (StringUtils.isNotBlank(asc)){
            if (asc.equals("desc")){
                page.addOrder(OrderItem.desc(colum));
            }else {
                page.addOrder(OrderItem.asc(colum));
            }
        }

        return page;
    }

}
